package com.springboot.springbootlogindemo.service;

import org.apache.tomcat.util.codec.binary.Base64;
import org.springframework.stereotype.Service;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;

/**
 * [说明/描述]
 *
 * @author 张怡冉
 * @version 版本号
 * @date {2024/4/26}
 */
@Service
public class DesService {
        public static String encrypt(String Text,String originKey) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        SecretKeySpec key = getKey(originKey);  /*对密钥进行操作，产生16个48位长的子密钥*/
        cipher.init(Cipher.ENCRYPT_MODE, key); /*初始化cipher，选定模式，这里为加密模式，并同时传入密钥*/
        byte[] doFinal = cipher.doFinal(Text.getBytes());   /*开始加密操作*/
        String encode = Base64.encodeBase64String(doFinal);    /*对加密后的数据按照Base64进行编码*/
        return encode;

    }

    /**
     * 解密算法
     */

    public static String decrypt(String Text, String originKey) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");   /*初始化加密方式*/
        Key key = getKey(originKey);  /*获取密钥*/
        cipher.init(Cipher.DECRYPT_MODE, key);  /*初始化操作方式*/
        byte[] decode = Base64.decodeBase64(Text);  /*按照Base64解码*/
        byte[] doFinal = cipher.doFinal(decode);   /*执行解码操作*/
        return new String(doFinal);   /*转换成相应字符串并返回*/
    }

    /**
     * 获取密钥算法
     */
    public static SecretKeySpec getKey(String originKey) {
        byte[] buffer = new byte[8];
        byte[] originBytes = originKey.getBytes();
        /**
         * 防止输入的密钥长度超过64位
         */
        for (int i = 0; i < 8 && i < originBytes.length; i++) {
            buffer[i] = originBytes[i];  /*如果originBytes不足8,buffer剩余的补零*/
        }
        SecretKeySpec key = new SecretKeySpec(buffer, "DES"); /*第一个参数是密钥字节数组，第二个参数是加密方式*/
        return key;  /*返回操作之后得到的密钥*/
    }

}
